<!DOCTYPE html><html lang="zh-Hans"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><meta name="description" content="git不常见操作熟悉"><meta name="keywords" content="git"><meta name="author" content="晟松"><meta name="copyright" content="晟松"><title>git不常见操作熟悉 | 晟松</title><link rel="shortcut icon" href="/logo.png"><link rel="stylesheet" href="/css/index.css?version=1.9.0"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/font-awesome@latest/css/font-awesome.min.css?version=1.9.0"><meta name="format-detection" content="telephone=no"><meta http-equiv="x-dns-prefetch-control" content="on"><link rel="dns-prefetch" href="https://cdn.jsdelivr.net"><link rel="dns-prefetch" href="https://hm.baidu.com"><script>var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?c34d81d53341febe06a155941e2df16d";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();</script><meta http-equiv="Cache-Control" content="no-transform"><meta http-equiv="Cache-Control" content="no-siteapp"><script>var GLOBAL_CONFIG = { 
  root: '/',
  algolia: undefined,
  localSearch: {"path":"search.xml","languages":{"hits_empty":"找不到您查询的内容:${query}"}},
  copy: {
    success: '复制成功',
    error: '复制错误',
    noSupport: '浏览器不支持'
  },
  hexoVersion: '5.4.0'
} </script><meta name="generator" content="Hexo 5.4.0"></head><body><i class="fa fa-arrow-right" id="toggle-sidebar" aria-hidden="true"></i><div id="sidebar" data-display="true"><div class="toggle-sidebar-info text-center"><span data-toggle="切换文章详情">切换站点概览</span><hr></div><div class="sidebar-toc"><div class="sidebar-toc__title">目录</div><div class="sidebar-toc__progress"><span class="progress-notice">你已经读了</span><span class="progress-num">0</span><span class="progress-percentage">%</span><div class="sidebar-toc__progress-bar"></div></div><div class="sidebar-toc__content"><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#git%E4%B8%8D%E5%B8%B8%E8%A7%81%E6%93%8D%E4%BD%9C"><span class="toc-number">1.</span> <span class="toc-text">git不常见操作</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%9F%90%E4%BA%9B%E6%93%8D%E4%BD%9C"><span class="toc-number">1.1.</span> <span class="toc-text">某些操作</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%A3%80%E5%87%BA"><span class="toc-number">1.1.1.</span> <span class="toc-text">检出</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%9B%9E%E6%BB%9A"><span class="toc-number">1.1.2.</span> <span class="toc-text">回滚</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#git-clean"><span class="toc-number">1.1.2.1.</span> <span class="toc-text">git clean</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E9%87%8D%E5%86%99%E6%8F%90%E4%BA%A4%E5%BF%AB%E7%85%A7"><span class="toc-number">1.1.3.</span> <span class="toc-text">重写提交快照</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#git-commit-%E2%80%94amend"><span class="toc-number">1.1.3.1.</span> <span class="toc-text">git commit —amend</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#%E6%A0%97%E5%AD%90"><span class="toc-number">1.1.3.1.1.</span> <span class="toc-text">栗子</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#git-rebase"><span class="toc-number">1.1.3.2.</span> <span class="toc-text">git rebase</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#git-reflog"><span class="toc-number">1.1.3.3.</span> <span class="toc-text">git reflog</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E4%BB%A3%E7%A0%81%E5%90%8C%E6%AD%A5"><span class="toc-number">1.1.4.</span> <span class="toc-text">代码同步</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#git-pull"><span class="toc-number">1.1.4.1.</span> <span class="toc-text">git pull</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%9B%9E%E6%BB%9A%E6%93%8D%E4%BD%9C%E7%9A%84%E8%BE%A8%E5%88%AB"><span class="toc-number">1.1.5.</span> <span class="toc-text">回滚操作的辨别</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#git-reset"><span class="toc-number">1.1.5.1.</span> <span class="toc-text">git reset</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#git-checkout"><span class="toc-number">1.1.5.2.</span> <span class="toc-text">git checkout</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#git-revert"><span class="toc-number">1.1.5.3.</span> <span class="toc-text">git revert</span></a></li></ol></li></ol></li></ol></li></ol></div></div><div class="author-info hide"><div class="author-info__avatar text-center"><img src="/img/avatar.png"></div><div class="author-info__name text-center">晟松</div><div class="author-info__description text-center">晟松的博客</div><div class="follow-button"><a target="_blank" rel="noopener" href="https://gitee.com/cheng_song">Gitee</a></div><hr><div class="author-info-articles"><a class="author-info-articles__archives article-meta" href="/archives"><span class="pull-left">文章</span><span class="pull-right">52</span></a><a class="author-info-articles__tags article-meta" href="/tags"><span class="pull-left">标签</span><span class="pull-right">45</span></a></div></div></div><div id="content-outer"><div id="top-container" style="background-image: url(/img/blog-bg.jpg)"><div id="page-header"><span class="pull-left"> <a id="site-name" href="/">晟松</a></span><i class="fa fa-bars toggle-menu pull-right" aria-hidden="true"></i><span class="pull-right menus">   <a class="site-page" href="/">Home</a><a class="site-page" href="/archives">Archives</a><a class="site-page" href="/tags">Tags</a><a class="site-page" href="/categories">Categories</a></span><span class="pull-right"><a class="site-page social-icon search"><i class="fa fa-search"></i><span> 搜索</span></a></span></div><div id="post-info"><div id="post-title">git不常见操作熟悉</div><div id="post-meta"><time class="post-meta__date"><i class="fa fa-calendar" aria-hidden="true"></i> 2022-07-23</time><div class="post-meta-wordcount"><span>字数总计: </span><span class="word-count">2.7k</span><span class="post-meta__separator">|</span><span>阅读时长: 8 分钟</span></div></div></div></div><div class="layout" id="content-inner"><article id="post"><div class="article-container" id="post-content"><h2 id="git不常见操作"><a href="#git不常见操作" class="headerlink" title="git不常见操作"></a>git不常见操作</h2><p>对我来说，git的常见操作只有 clone、pull、add、log、status、commit、push这一些很常见的操作，同时还没有附带这些命令中的特殊参数，如 git log -p查看提交中的文件被修改的行，所以简要记录一下。</p>
<p>说明：本文根据此篇git文章进行学习，<a target="_blank" rel="noopener" href="https://www.bookstack.cn/read/git-recipes/sources-2.5.md">2.5 检出以前的提交 - 《Git 菜单》 - 书栈网 · BookStack</a></p>
<h3 id="某些操作"><a href="#某些操作" class="headerlink" title="某些操作"></a>某些操作</h3><h4 id="检出"><a href="#检出" class="headerlink" title="检出"></a>检出</h4><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">git checkout &lt;commit&gt; &lt;file&gt;</span><br><span class="line"></span><br><span class="line">git checkout b9dd3a68f243ebf44695226f2de031b8609f86fe src/utils/test.js</span><br></pre></td></tr></table></figure>

<p>从某一个提交中检出某一个文件，最主要的用途就是讲一个文件还原至某一个提交的状态，注意这里会影响你的项目的状态</p>
<p>注意：file需为全路径，且这个文件需要在这个提交中，不然是没有变化的</p>
<p><img src="https://gitee.com/cheng_song/picgo-img/raw/master/img/image-20220723120752483.png" alt="image-20220723120752483"></p>
<p><img src="https://gitee.com/cheng_song/picgo-img/raw/master/img/image-20220723115504750.png" alt="image-20220723115504750"></p>
<p>但似乎sourcetree里面可以直接查看某一个提交中的文件，可以简化操作</p>
<p>至于检出一个commit，会创建一个分离的head，同时不在任何分支上，一般用于刚clone下来，然后去到某一个提交的版本，注意此操作需要所有更改被提交，所以就不会影响各自的项目状态</p>
<p><img src="https://gitee.com/cheng_song/picgo-img/raw/master/img/image-20220723121223564.png" alt="image-20220723121223564"></p>
<p>至于在检出某一个commit并进行修改后，再次检出至其他commit，这次检出会被终止，需要丢弃此修改，才能重新检出</p>
<p>至于检出分支这个就不用说了</p>
<h4 id="回滚"><a href="#回滚" class="headerlink" title="回滚"></a>回滚</h4><p>常见的命令就是，<commit> 常为 HEAD~1，为前一次提交</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">git reset --soft &lt;commit&gt; # 常用此命令，不会覆盖已修改的代码</span><br><span class="line">git reset --hard &lt;commit&gt; # 会覆盖已修改的代码</span><br><span class="line">git revert &lt;commit&gt;</span><br></pre></td></tr></table></figure>

<p><strong>git revert</strong>为：生成一个撤消了 <code>&lt;commit&gt;</code> 引入的修改的新提交，然后应用到当前分支。所以git中还是会有记录的</p>
<p><img src="https://gitee.com/cheng_song/picgo-img/raw/master/img/image-20220723123847402.png" alt="image-20220723123847402"></p>
<p><strong>git reset</strong>：如果说 <code>git revert</code> 是一个撤销更改安全的方式，你可以将 <code>git reset</code> 看做一个 <em>危险</em> 的方式。当你用 <code>git reset</code> 来重设更改时(提交不再被任何引用或引用日志所引用)，我们无法获得原来的样子——这个撤销是永远的。使用这个工具的时候务必要小心，因为这是少数几个可能会造成工作丢失的命令之一。</p>
<p>它通常被用来撤销缓存区和工作目录的修改。不管是哪种情况，它应该只被用于 <em>本地</em> 修改</p>
<p>git reset 都是用来移除仓库中的修改。没有 <code>--hard</code> 标记时 <code>git reset</code> 通过取消缓存或取消一系列的提交，然后重新构建提交来清理仓库。而加上 <code>--hard</code> 标记对于作了大死之后想要重头再来尤其方便。</p>
<p><strong>重点是</strong>：确保你只对本地的修改使用 <code>git reset</code>，而不是公共更改。如果你需要修复一个公共提交，<code>git revert</code> 命令正是被设计来做这个的。</p>
<h5 id="git-clean"><a href="#git-clean" class="headerlink" title="git clean"></a>git clean</h5><p><code>git clean -f</code> 命令将未跟踪的文件从你的工作目录中移除。</p>
<p><code>git clean</code> 命令经常和 <code>git reset --hard</code> 一起使用。记住，reset 只影响被跟踪的文件，所以还需要一个单独的命令来清理未被跟踪的文件。这个两个命令相结合，你就可以将工作目录回到之前特定提交时的状态。</p>
<h4 id="重写提交快照"><a href="#重写提交快照" class="headerlink" title="重写提交快照"></a>重写提交快照</h4><p>就是对git中的一些提交信息进行修改，比如说合并提交，将多次提交的文件合并至某一个commit中</p>
<h5 id="git-commit-—amend"><a href="#git-commit-—amend" class="headerlink" title="git commit —amend"></a>git commit —amend</h5><p><code>git commit --amend</code> 命令是修复最新提交的便捷方式。它允许你将缓存的修改和之前的提交合并到一起，而不是提交一个全新的快照。它还可以用来简单地编辑上一次提交的信息而不改变快照。但是，amend 不只是修改了最新的提交——它进行了一次替换。对于 Git 来说，这看上去像一个全新的提交。</p>
<p>仓促的提交在你日常开发过程中时常会发生。很容易就忘记了缓存一个文件或者弄错了提交信息的格式。<code>--amend</code> 标记是修复这些小意外的便捷方式。</p>
<p><strong>注意</strong>：这个命令似乎也只是在本地修改了提交，</p>
<h6 id="栗子"><a href="#栗子" class="headerlink" title="栗子"></a>栗子</h6><p>下面这个🌰展示了 Git 开发工作流中的一个常见情形。我们编辑了一些希望在同一个快照中提交的文件，但我们忘记添加了其中的一个。修复错误只需要缓存那个文件并且用 <code>--amend</code> 标记提交：</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line"># 编辑 hello.py 和 main.py</span><br><span class="line">git add hello.py</span><br><span class="line">git commit</span><br><span class="line"></span><br><span class="line"># 意识到你忘记添加 main.py 的更改</span><br><span class="line">git add main.py</span><br><span class="line">git commit --amend --no-edit</span><br></pre></td></tr></table></figure>

<p>编辑器会弹出上一次提交的信息，加入 <code>--no-edit</code> 标记会修复提交但不修改提交信息。需要的话你可以修改，不然的话就像往常一样保存并关闭文件。完整的提交会替换之前不完整的提交，看上去就像我们在同一个快照中提交了 <code>hello.py</code> 和 <code>main.py</code>。</p>
<h5 id="git-rebase"><a href="#git-rebase" class="headerlink" title="git rebase"></a>git rebase</h5><p>是将分支移到一个新的基提交的过程。rebase 是将上游更改合并进本地仓库的通常方法。你每次想查看上游进展时，用 <code>git merge</code> 拉取上游更新会导致一个多余的合并提交。在另一方面，rebase 就好像是说「我想将我的更改建立在其他人的进展之上」。</p>
<p>一种用法：常用于项目多分支之间获取最新提交时带上 -<strong>-rebase</strong> 命令</p>
<h5 id="git-reflog"><a href="#git-reflog" class="headerlink" title="git reflog"></a>git reflog</h5><p>可以查看操作记录，每次当前的 HEAD 更新时（如切换分支、拉取新更改、重写历史或只是添加新的提交），引用日志都会添加一个新条目。</p>
<p><img src="https://gitee.com/cheng_song/picgo-img/raw/master/img/image-20220723132042050.png" alt="image-20220723132042050"></p>
<h4 id="代码同步"><a href="#代码同步" class="headerlink" title="代码同步"></a>代码同步</h4><p>git  remote -v ：查看远程连接</p>
<p><code>git remote add &lt;name&gt; &lt;url&gt;</code> 新增远程连接</p>
<p>当你用 <code>git clone</code> 克隆仓库时，它自动创建了一个名为 origin 的远程连接，指向被克隆的仓库。</p>
<p><code>git fetch &lt;remote&gt; &lt;branch&gt;</code> 命令将提交从远程仓库导入到你的本地仓库。拉取下来的提交储存为远程分支，而不是我们一直使用的普通的本地分支。你因此可以在整合进你的项目副本之前查看更改。当你希望查看其他人的工作进展时，你需要 fetch。<strong>fetch 下来的内容表示为一个远程分支，因此不会影响你的本地开发</strong>。</p>
<h5 id="git-pull"><a href="#git-pull" class="headerlink" title="git pull"></a>git pull</h5><p>拉取当前分支对应的远程副本中的更改，并立即并入本地副本。效果和 <code>git fetch</code> 后接 <code>git merge origin/.</code> 一致。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">git pull --rebase &lt;remote&gt;</span><br></pre></td></tr></table></figure>

<p><code>--rebase</code> 标记可以用来保证线性的项目历史，防止合并提交（merge commits）的产生。很多开发者倾向于使用 rebase 而不是 merge，因为「我想要把我的更改放在其他人完成的工作之后」。</p>
<h4 id="回滚操作的辨别"><a href="#回滚操作的辨别" class="headerlink" title="回滚操作的辨别"></a>回滚操作的辨别</h4><p><code>git reset</code>、<code>git checkout</code> 和 <code>git revert</code> 是你的 Git 工具箱中最有用的一些命令。它们都用来撤销代码仓库中的某些更改，而前两个命令不仅可以作用于提交，还可以作用于特定文件。</p>
<h5 id="git-reset"><a href="#git-reset" class="headerlink" title="git reset"></a>git reset</h5><p>在提交层面上，reset 将一个分支的末端指向另一个提交。这可以用来移除当前分支的一些提交。比如，下面这两条命令让 hotfix 分支向后回退了两个提交。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">git checkout hotfix</span><br><span class="line">git reset HEAD~2</span><br></pre></td></tr></table></figure>

<p>也就是说，下次 Git 执行垃圾回收的时候，这两个提交会被删除。</p>
<p><img src="https://static.sitestack.cn/projects/git-recipes/3adbd9834feb8cfd8638dfd645444496.png;charset=utf-8" alt="把hotfix分支reset到HEAD~2"></p>
<p>如果你的更改还没有共享给别人，<code>git reset</code> 是撤销这些更改的简单方法。</p>
<p>除了在当前分支上操作，你还可以通过传入这些标记来修改你的缓存区或工作目录：</p>
<ul>
<li>—soft – 缓存区和工作目录都不会被改变</li>
<li>—mixed – 默认选项。缓存区和你指定的提交同步，但工作目录不受影响</li>
<li>—hard – 缓存区和工作目录都同步到你指定的提交</li>
</ul>
<p>比如，<code>git reset --mixed HEAD</code> 将你当前的改动从缓存区中移除，但是这些改动还留在工作目录中。另一方面，如果你想完全舍弃你没有提交的改动，你可以使用 <code>git reset --hard HEAD</code>。这是 <code>git reset</code> 最常用的两种用法。</p>
<h5 id="git-checkout"><a href="#git-checkout" class="headerlink" title="git checkout"></a>git checkout</h5><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">git checkout hotfix</span><br></pre></td></tr></table></figure>

<p>上面这个命令做的不过是将HEAD移到一个新的分支，然后更新工作目录。因为这可能会覆盖本地的修改，Git 强制你提交或者缓存工作目录中的所有更改，不然在 checkout 的时候这些更改都会丢失。</p>
<p><img src="https://static.sitestack.cn/projects/git-recipes/b5ad4ac9c92eb372e084162d2eb5644d.png;charset=utf-8" alt="将 HEAD 从 master 移到 hotfix"></p>
<p>除了分支之外，你还可以传入提交的引用来 checkout 到任意的提交。这和 checkout 到另一个分支是完全一样的：把 HEAD 移动到特定的提交。比如，下面这个命令会 checkout 到当前提交的祖父提交。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">git checkout HEAD~2</span><br></pre></td></tr></table></figure>

<p><img src="https://static.sitestack.cn/projects/git-recipes/de9dceb2c9394eacdc395fd7144b5b82.svg" alt="将 HEAD 移动到任意 commit"></p>
<p>这对于快速查看项目旧版本来说非常有用。但如果你当前的 HEAD 没有任何分支引用，那么这会造成 HEAD 分离。这是非常危险的，如果你接着添加新的提交，然后切换到别的分支之后就没办法回到之前添加的这些提交。因此，在为分离的 HEAD 添加新的提交的时候<strong>你应该创建一个新的分支。</strong></p>
<h5 id="git-revert"><a href="#git-revert" class="headerlink" title="git revert"></a>git revert</h5><p>Revert 撤销一个提交的同时会创建一个新的提交。这是一个安全的方法，因为它不会重写提交历史。比如，下面的命令会找出倒数第二个提交，然后创建一个新的提交来撤销这些更改，然后把这个提交加入项目中。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">git checkout hotfix</span><br><span class="line">git revert HEAD~2</span><br></pre></td></tr></table></figure>

<p>如下图所示：</p>
<p><img src="https://static.sitestack.cn/projects/git-recipes/44442db2f51e895a1263b9558c292368.svg" alt="revert到倒数第二个commit"></p>
<p>相比 <code>git reset</code>，它不会改变现在的提交历史。因此，<code>git revert</code> 可以用在公共分支上，<code>git reset</code> 应该用在私有分支上。</p>
<p>你也可以把 <code>git revert</code> 当作撤销已经提交的更改，而 <code>git reset HEAD</code> 用来撤销没有提交的更改。</p>
<table>
<thead>
<tr>
<th align="center">命令</th>
<th align="center">作用域</th>
<th align="left">常用情景</th>
</tr>
</thead>
<tbody><tr>
<td align="center">git reset</td>
<td align="center">提交层面</td>
<td align="left">在私有分支上舍弃一些没有提交的更改</td>
</tr>
<tr>
<td align="center">git reset</td>
<td align="center">文件层面</td>
<td align="left">将文件从缓存区中移除</td>
</tr>
<tr>
<td align="center">git checkout</td>
<td align="center">提交层面</td>
<td align="left">切换分支或查看旧版本</td>
</tr>
<tr>
<td align="center">git checkout</td>
<td align="center">文件层面</td>
<td align="left">舍弃工作目录中的更改</td>
</tr>
<tr>
<td align="center">git revert</td>
<td align="center">提交层面</td>
<td align="left">在公共分支上回滚更改</td>
</tr>
<tr>
<td align="center">git revert</td>
<td align="center">文件层面</td>
<td align="left">（然而并没有）</td>
</tr>
</tbody></table>
</div></article><div class="post-copyright"><div class="post-copyright__author"><span class="post-copyright-meta">文章作者: </span><span class="post-copyright-info"><a href="mailto:undefined">晟松</a></span></div><div class="post-copyright__type"><span class="post-copyright-meta">文章链接: </span><span class="post-copyright-info"><a href="https://chengsong.info/2022/07/23/git不常见操作熟悉/">https://chengsong.info/2022/07/23/git不常见操作熟悉/</a></span></div><div class="post-copyright__notice"><span class="post-copyright-meta">版权声明: </span><span class="post-copyright-info">本博客所有文章除特别声明外，均采用 <a target="_blank" rel="noopener" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a> 许可协议。转载请注明来自 <a href="https://chengsong.info">晟松</a>！</span></div></div><div class="post-meta__tag-list"><a class="post-meta__tags" href="/tags/git/">git</a></div><nav id="pagination"><div class="prev-post pull-left"><a href="/2022/08/20/test/"><i class="fa fa-chevron-left">  </i><span></span></a></div><div class="next-post pull-right"><a href="/2022/07/16/%E9%A1%B9%E7%9B%AE%E5%BC%95%E5%85%A5%E7%81%B5%E7%8F%91%E4%BC%98%E5%8C%96/"><span>项目引入灵珑优化</span><i class="fa fa-chevron-right"></i></a></div></nav></div></div><footer class="footer-bg" style="background-image: url(/img/blog-bg.jpg)"><div class="layout" id="footer"><div class="copyright">&copy;2020 - 2023 By 晟松</div><div class="framework-info"><span>驱动 - </span><a target="_blank" rel="noopener" href="http://hexo.io"><span>Hexo</span></a><span class="footer-separator">|</span><span>主题 - </span><a target="_blank" rel="noopener" href="https://github.com/Molunerfinn/hexo-theme-melody"><span>Melody</span></a></div><div class="icp"><a target="_blank" rel="noopener" href="http://www.beian.miit.gov.cn/"><span>湘ICP备2020021729号</span></a></div><div class="busuanzi"><script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><span id="busuanzi_container_page_pv"><i class="fa fa-file"></i><span id="busuanzi_value_page_pv"></span><span></span></span></div></div></footer><i class="fa fa-arrow-up" id="go-up" aria-hidden="true"></i><script src="https://cdn.jsdelivr.net/npm/animejs@latest/anime.min.js"></script><script src="https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.js"></script><script src="https://cdn.jsdelivr.net/npm/velocity-animate@latest/velocity.min.js"></script><script src="https://cdn.jsdelivr.net/npm/velocity-ui-pack@latest/velocity.ui.min.js"></script><script src="/js/utils.js?version=1.9.0"></script><script src="/js/fancybox.js?version=1.9.0"></script><script src="/js/sidebar.js?version=1.9.0"></script><script src="/js/copy.js?version=1.9.0"></script><script src="/js/fireworks.js?version=1.9.0"></script><script src="/js/transition.js?version=1.9.0"></script><script src="/js/scroll.js?version=1.9.0"></script><script src="/js/head.js?version=1.9.0"></script><script src="/js/search/local-search.js"></script><script>if(/Android|webOS|iPhone|iPod|iPad|BlackBerry/i.test(navigator.userAgent)) {
  $('#nav').addClass('is-mobile')
  $('footer').addClass('is-mobile')
  $('#top-container').addClass('is-mobile')
}</script><div class="search-dialog" id="local-search"><div class="search-dialog__title" id="local-search-title">本地搜索</div><div id="local-input-panel"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章"></div></div></div><hr><div id="local-search-results"><div id="local-hits"></div><div id="local-stats"><div class="local-search-stats__hr" id="hr"><span>由</span> <a target="_blank" rel="noopener" href="https://github.com/wzpan/hexo-generator-search" style="color:#49B1F5;">hexo-generator-search</a>
 <span>提供支持</span></div></div></div><span class="search-close-button"><i class="fa fa-times"></i></span></div><div class="search-mask"></div></body></html>